package tempsReel;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import metiers.Cluster;
import metiers.Clustering;
import metiers.Concept;

@ManagedBean
public class VueResultatsBean {
	@ManagedProperty(value = "#{contextUser}")
	private ContexteUtilisateur contexteUtilisateur;

	private String modalite1;

	private String modalite2;

	private Cluster clusterCourant = new Cluster();

	public VueResultatsBean() {

	}

	public ContexteUtilisateur getContexteUtilisateur() {
		return contexteUtilisateur;
	}

	public void setContexteUtilisateur(ContexteUtilisateur contexteUtilisateur) {
		this.contexteUtilisateur = contexteUtilisateur;
	}

	public String getModalite1() {
		return modalite1;
	}

	public void setModalite1(String modalite1) {
		this.modalite1 = modalite1;
	}

	public String getModalite2() {
		return modalite2;
	}

	public void setModalite2(String modalite2) {
		this.modalite2 = modalite2;
	}

	public Cluster getClusterCourant() {
		return clusterCourant;
	}

	public void setClusterCourant(Cluster clusterCourant) {
		this.clusterCourant = clusterCourant;
	}

	/**
	 * Méthode permettant d'obtenir tous les concepts de la requête (concept
	 * principal + tous les concepts complémentaires)
	 * 
	 * @return la liste de tous les concepts
	 */
	public List<Concept> getConcepts() {
		List<Concept> concepts = new ArrayList<Concept>();
		if (contexteUtilisateur.getResultat().getListeConceptsParImportance()
				.size() != 0
				&& contexteUtilisateur.getResultat()
						.getListeConceptsParImportance().size() <= 2) {
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(0));
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(1));
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(2));
		} else {
			concepts.add(contexteUtilisateur.getResultat().getRequete()
					.getConceptPrincipal());
			concepts.addAll(contexteUtilisateur.getResultat().getRequete()
					.getConcepts());
		}
		return concepts;
	}

	/**
	 * Méthode permettant de récupérer toutes les modalités de l'axe1 pour le
	 * selectOneMenu
	 * 
	 * @return la liste des modalités de l'axe1
	 */
	public List<String> getModalites1() {
		// Concept concept1 = contexteUtilisateur.getConcept1();
		// Concept concept2 = contexteUtilisateur.getConcept2();
		List<String> modalites1 = new ArrayList<String>();
		Clustering clustering = contexteUtilisateur.getClusteringChoisi();
		// for (int j = 0; j <
		// contexteUtilisateur.getResultat().getClusterings()
		// .size(); j++) {
		// Clustering clustering = contexteUtilisateur.getResultat()
		// .getClusterings().get(j);
		//
		// if (clustering.getConcept1().equals(concept1)
		// && clustering.getConcept2().equals(concept2)) {
		// for (Cluster cluster : clustering.getClusters()) {
		// modalites1.add(cluster.getModalite1());
		// }
		// }
		//
		// }
		for (Cluster cluster : clustering.getClusters()) {
			modalites1.add(cluster.getModalite1());
		}
		Set<String> set = new HashSet<String>();
		set.addAll(modalites1);
		ArrayList<String> distinctModalites1 = new ArrayList<String>(set);

		return distinctModalites1;
	}

	/**
	 * Méthode permettant de récupérer toutes les modalités de l'axe2 pour le
	 * selectOneMenu
	 * 
	 * @return la liste des modalités de l'axe2
	 */
	public List<String> getModalites2() {
		// Concept concept1 = contexteUtilisateur.getConcept1();
		// Concept concept2 = contexteUtilisateur.getConcept2();
		List<String> modalites2 = new ArrayList<String>();
		Clustering clustering = contexteUtilisateur.getClusteringChoisi();
		// for (int j = 0; j <
		// contexteUtilisateur.getResultat().getClusterings()
		// .size(); j++) {
		// Clustering clustering = contexteUtilisateur.getResultat()
		// .getClusterings().get(j);
		//
		// if (clustering.getConcept1().equals(concept1)
		// && clustering.getConcept2().equals(concept2)) {
		// for (Cluster cluster : clustering.getClusters()) {
		// modalites2.add(cluster.getModalite2());
		// }
		//
		// }
		//
		// }

		for (Cluster cluster : clustering.getClusters()) {
			modalites2.add(cluster.getModalite2());
		}
		Set<String> set2 = new HashSet<String>();
		set2.addAll(modalites2);
		ArrayList<String> distinctModalites2 = new ArrayList<String>(set2);

		return distinctModalites2;
	}

	public void validerChoixModalites() {
		Cluster cluster = contexteUtilisateur.getClusteringChoisi().getCluster(
				modalite1, modalite2);
		this.clusterCourant = cluster;
		System.out.println(clusterCourant.getDonnees().size());
	}

}
